package com.dhecp.project.business.mapper;

import java.util.List;
import java.util.Map;
import java.util.Set;

import org.apache.ibatis.annotations.Param;

import com.dhecp.core.genericDao.GenericDao;
import com.dhecp.project.business.domain.ProductBasis;
import com.dhecp.project.business.domain.ProductBasisCompete;
import com.dhecp.project.business.domain.ProductBasisComponent;
import com.dhecp.project.common.domain.DataBaseMessage;

/**
 * 基础商品库 DAO
 * @author DH-Xxj
 * @version 2022年7月11日
 */
public interface ProductBasisMapper extends GenericDao<ProductBasis, String>{

	/**
     * 查询基础商品库
     * @param
     * @return List - ProductBasis
	 * @author DH-Xxj
	 */
	List<ProductBasis> findProductBasis(Map<String, Object> params);

	/**
     * 查询基础商品子件
     * @param
     * @return List - ProductBasisComponent
	 * @author DH-Xxj
	 */
	List<ProductBasisComponent> findProductBasisComponent(Map<String, Object> params);

	/**
     * 查询基础竞品库
     * @param
     * @return List - ProductBasisCompete
	 * @author DH-Xxj
	 */
	List<ProductBasisCompete> findProductBasisCompete(Map<String, Object> params);


	/**
	 * 查询已选择的商品数据
	 * @param params
	 * @return
	 */
	List<ProductBasis> queryProductBasisList(Map<String, Object> params);


	/**
     * 通过guid查询单条基础商品库
     * @param guid
     * @return 实体 ProductBasis
	 * @author DH-Xxj
	 */
	ProductBasis findProductBasisByGuid(@Param("guid") String guid);


	/**
	 * 通过code查询单条基础商品库
	 * @param code
	 * @return
	 */
	ProductBasis findProductBasisByCode(@Param("code") String code);

	/**
     * 通过guid查询单条基础商品子件
     * @param guid
     * @return 实体 ProductBasisComponent
	 * @author DH-Xxj
	 */
	ProductBasisComponent findProductBasisComponentByGuid(@Param("guid") String guid);

	/**
	*@Description: 根据code查询商品子件
	*@Param: [code]
	*@return: com.dhecp.project.business.domain.ProductBasisComponent
	*@Author: hlf
	*@date: 2023-01-13 15:25
	*/
	ProductBasisComponent findProductBasisComponentByCode(@Param("code") String code);

	/**
     * 通过guid查询单条基础竞品库
     * @param guid
     * @return 实体 ProductBasisCompete
	 * @author DH-Xxj
	 */
	ProductBasisCompete findProductBasisCompeteByGuid(@Param("guid") String guid);
	
	/**
     * 通过pcode查询基础商品子件
     * @param pcode 必要参数：商品母件编码
     * @return List - ProductBasisComponent
	 * @author DH-Xxj
	 */
	List<ProductBasisComponent> findProductBasisComponentBypcode(@Param("pcode") String pcode);
	
	/**
	*@Description: 通过pcode查询基础商品子件
	*@Param: [params]
	*@return: java.util.List<com.dhecp.project.business.domain.ProductBasisComponent>
	*@Author: hlf
	*@date: 2022-08-19 14:26
	*/
	List<ProductBasisComponent> findInProductBasisComponentBypcode(Map<String, Object> params);

	/**
     * 通过pcode查询基础竞品库
     * @param pcode 必要参数：商品母件编码
     * @return List - ProductBasisCompete
	 * @author DH-Xxj
	 */
	List<ProductBasisCompete> findProductBasisCompeteBypcode(@Param("pcode") String pcode);
	
	/**
	 * 清理商品导入过渡表中遗留的数据
	 * @param sessionId
	 * @return DataBaseMessage
	 * @author DH-Xxj
	 */
	DataBaseMessage cleanProductBasisImport(Map<String, Object> params);

	/**
	 * 将本次导入的商品数据从商品导入过渡表中转入商品库正式表
	 * @param sessionId
	 * @param records
	 * @return DataBaseMessage
	 * @author DH-Xxj
	 */
	DataBaseMessage importToProductBasis(Map<String, Object> params);
	
	/**
	 * 新增基础商品库
	 * @param productBasis 必要参数：基础商品库实体 ProductBasis
	 * @return
	 * @author DH-Xxj
	 */
	int insertProductBasis(ProductBasis productBasis);
	
	/**
	 * 导入商品信息至商品库过渡表
	 * @param productBasis
	 * @return
	 */
	int importProductBasis(ProductBasis productBasis);
	
	/**
	 * 新增基础商品子件
	 * @param productBasisComponent 必要参数：基础商品子件实体 ProductBasisComponent
	 * @return
	 * @author DH-Xxj
	 */
	int insertProductBasisComponent(ProductBasisComponent productBasisComponent);

	/**
	 * 批量新增基础商品子件
	 * @param dataList
	 * @return
	 */
	int insertProductBasisComponentBatch(List<ProductBasisComponent> dataList);
	
	/**
	 * 新增基础竞品库
	 * @param productBasisCompete 必要参数：基础竞品库实体 ProductBasisCompete
	 * @return
	 * @author DH-Xxj
	 */
	int insertProductBasisCompete(ProductBasisCompete productBasisCompete);
	
	/**
     * 修改基础商品库
     * @param productBasis 必要参数：基础商品库实体 ProductBasis
	 * @return
	 * @author DH-Xxj
	 */
	int updateProductBasis(ProductBasis productBasis);

	int updateProductBasisState(ProductBasis productBasis);

	/**
     * 修改基础商品子件
     * @param productBasisComponent 必要参数：基础商品子件实体 ProductBasisComponent
	 * @return
	 * @author DH-Xxj
	 */
	int updateProductBasisComponent(ProductBasisComponent productBasisComponent);
	
	/**
     * 修改基础竞品库
     * @param productBasisCompete 必要参数：基础竞品库实体 ProductBasisCompete
	 * @return
	 * @author DH-Xxj
	 */
	int updateProductBasisCompete(ProductBasisCompete productBasisCompete);
	
	/**
	 * 通过guid删除基础商品库
	 * @param guid 必要参数：行唯一值
	 * @return
	 * @author DH-Xxj
	 */
	int deleteProductBasisByGuid(@Param("guid") String guid);


	/**
	 * 通过guid删除基础商品子件
	 * @param guid 必要参数：行唯一值
	 * @return
	 * @author DH-Xxj
	 */
	int deleteProductBasisComponentByGuid(@Param("guid") String guid);


	/**
	*@Description: 根据code删除商品子件
	*@Param: [code]
	*@return: int
	*@Author: hlf
	*@date: 2023-01-13 15:37
	*/
	int deleteProductBasisComponentByCode(@Param("code") String code);

	/**
	 * 通过guid删除基础竞品库
	 * @param guid 必要参数：行唯一值
	 * @return
	 * @author DH-Xxj
	 */
	int deleteProductBasisCompeteByGuid(@Param("guid") String guid);

	/**
	 * 通过pcode删除基础商品子件
	 * @param pcode 必要参数：商品母件编码
	 * @return
	 * @author DH-Xxj
	 */
	int deleteProductBasisComponentBypcode(@Param("pcode") String pcode);
	
	/**
	 * 通过pcode删除基础竞品库
	 * @param pcode 必要参数：商品母件编码
	 * @return
	 * @author DH-Xxj
	 */
	int deleteProductBasisCompeteBypcode(@Param("pcode") String pcode);
	
	/**
	 * 从基础商品库调入选品
	 * @param params
	 * @return List - ProductBasis
	 * @author DH-Xxj
	 */
	List<ProductBasis> callProductXP(Map<String, Object> params);

	/**
	 * 通过guid查询单条基础商品库并且关联网店商品数据
	 * @param params
	 * @return 实体 ProductBasis ,TP_AmazonShopProduct
	 * @author fxz
	 */
	List<ProductBasis> findOnlineStoreProducts(Map<String, Object> params);


	/**
	 * 批量查询商品库信息
	 * @param productBasisList
	 * @return
	 */
	List<ProductBasis> findOnlineStoreProductsBatch(Set<String> productBasisList);

	List<ProductBasis> findOnlineStoreProductsBatch1(Map<String, Set<String>> tmpCondition);


}
